草庐IT

Java TLS-PSK 套接字

全部标签

网络编程套接字(2)

UDP数据报套接字编程API介绍DatagramSocketDatagramSocket是UDP的Socket,用于发送和接收数据报.操作系统中有一类文件,就叫做socket文件(普通文件/目录文件:在硬盘上的)socket文件:抽象的表示了网卡这样的硬件设备DatagramSocket就是对socket文件进行读写,也就是借助网卡发送数据.通过网卡发送数据,就是写socket文件;通过网卡读取数据,就是读socket文件.DatagramSocket构造方法:方法签名方法说明DatagramSocket()创建一个UDP数据报套接字的Socket,绑定到本机任意一个随机端口(一般用于客户端)

c++ - 从套接字接收前几个字节以确定缓冲区大小

我正在用c++使用TCP/IP和sockets编写一个分布式系统。对于我的每条消息,我需要接收前5个字节才能知道传入消息的完整长度。执行此操作的最佳方法是什么?recv()只有5个字节,然后再次recv()。如果我选择这个,假设我会在recv中得到0或5个字节(也就是不写一个循环来继续尝试)是否安全?使用MSG_PEEKrecv()一些较大的缓冲区大小,然后读取前5个字节并分配最终缓冲区。 最佳答案 您不需要知道任何事情。TCP是一种流协议(protocol),在任何给定时刻,您可以获得少至一个字节或多至数兆字节的数据。使用TCP套

c++ - ZeroMQ 是否允许多个服务器套接字?

nativeC套接字API在accept()上返回一个新的套接字描述符,该描述符绑定(bind)到某个远程套接字。这很好,因为我可以创建线程、传递套接字并建立点对点连接,或者更好的是通过Internet建立线程对线程连接。而这正是我想要的:来自客户端的一个线程应该连接到服务器上的一个指定线程。因此,我不需要工作池或负载平衡,甚至不需要异步操作。服务器线程保存历史记录。ZeroMQ看起来不错,但据我所知,它不会在接受时拆分套接字。有没有办法与ZerMQ建立这样一个线程到线程的同步连接? 最佳答案 您问的是如何将特定解决方案(将套接字移

C++ Winsock 套接字错误 : 10038 (WSAENOTSOCK)

我有一个运行在WinXp(i7,2.1Ghz)上的主从应用程序Master,而slave是一个Controller板。主机向从机发送请求,从机作为响应循环向主机发送数据。从站循环发送的数据是每0.5毫秒1000字节。当master请求发送数据时,控制台报错。“Select()函数错误代码::10038”。这是WSAENOTSOCK的代码。这个应用程序是一个单线程应用程序,从从站接收数据。从错误来看,套接字似乎在select函数检查之前已关闭。谁能给我指明方向?:::源代码::::intReceive(){intrc;socklen_tcli_alen;structtimevalto;f

c++ - 在哪种情况下 UDP 套接字上的 sendto() 返回 0?

有没有一种情况,当在UDP套接字上调用sendto()时返回0,如果是,那是什么意思?手册只说,出错时为-1,否则为发送的字节数。 最佳答案 您可以在域数据报或UDP套接字上send()/sendto()零字节消息,在这种情况下,返回的长度为0字节是正确的.如果您意外地看到这个,请验证sendto(intfd,voidconst*buf,size_tlen,intflags,structconst*dest,sockles_taddrlen)中的len参数>打电话。 关于c++-在哪种情

c++ - 由于 select() 调用返回 EBADF,是否有任何方法可以获取套接字描述符?

我有一个代码,我在其中使用select()函数调用来轮询添加到readfds集的套接字列表,用于任何传入数据。while(1){ret=select(n,&readfds,NULL,NULL,&tv);if(ret==-1){perror("SelectFailed");}elseif(ret==0){printf("SelectTimeout\n");}else{recv(clientSocket,buffer,1024,0);printf("Datareceived:%s",buffer);}}我在readfds列表中添加了很多套接字。我的代码中还有另一个线程正在关闭readfds

c++ - BSD 套接字问题 : inet_ntop returning "0.0.0.0"

我正在尝试获取我绑定(bind)的正在监听的套接字的机器的IP。打印的端口号工作正常,但地址是“0.0.0.0”。这是相关的代码。在获取此代码之前,res已传递给getaddrinfo和getsockname。charip[INET_ADDRSTRLEN];structsockaddr_in*ipv4=(structsockaddr_in*)res->ai_addr;void*addr=&(ipv4->sin_addr);inet_ntop(res->ai_family,addr,ip,sizeofip);std::coutsin_port有什么问题吗? 最

c++ - select() 是否可以实现单套接字读/写超时?

我有一个应用程序处理带有阻塞调用的网络通信。每个线程管理一个连接。在套接字上读取或写入之前,我通过使用select在读取和写入操作上添加了超时。众所周知,Select在处理大量套接字时效率很低。但是,就性能而言,将它与单个套接字一起使用是否可以,或者是否有更有效的方法在单个套接字调用上添加超时支持?select的好处是便携。 最佳答案 是的,这没问题,您确实需要一些超时机制,以免从行为不端的客户端等处泄漏资源。请注意,拥有大量线程比使用select处理大量套接字效率更低。 关于c++-s

java - IPC:为每个请求连接还是保持套接字打开?

我计划使用套接字(本地TCP)在两个进程(本地运行)之间进行通信。一个进程将充当服务器,但两个进程异步地相互发送消息。我应该在进程的生命周期内保持套接字连接打开,还是为每个请求重新连接?如果我保持本地套接字打开,是否会出现任何问题? 最佳答案 保持套接字打开。这是一个更简单的选项,您不会因为打开一个新套接字(从客户端的角度)或接受一个新的客户端(从服务器的角度)而产生开销。 关于java-IPC:为每个请求连接还是保持套接字打开?,我们在StackOverflow上找到一个类似的问题:

c++ - 我们可以创建一个已经打开的套接字的 boost 套接字吗?

我有一个代码,通过一个stunServer为我的对等软件创建一个套接字,我想知道是否有可能创建一个boost::udp::socket已经打开的套接字?我已经在boost文档中进行了搜索,但没有找到允许这样做的内容。 最佳答案 是的。io_serviceios;ip::udp::socketsocket(ios);intnative_socket=::socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);socket1.assign(ip::udp::v4(),native_socket);参见thissam